const Koa = require('koa')
const Router = require('koa-router')
const { exec } = require('./db')
const parser = require('koa-bodyparser')
// 让密码不明文展示
const md5 = require('js-md5')
// 生成token
const jwt = require('jsonwebtoken')
const cors = require('@koa/cors')

const app = new Koa()
const router = new Router()
const key = "wang"

app.use(parser())
app.use(cors())


// 注册
router.post("/register", async (ctx) => {
    const { userName, passWord } = ctx.request.body
    // 判断用户在数据库中
    const data = await exec(`select * from user where userName='${userName}'`)
    if (data.length > 0) {
        ctx.body = {
            messag: "该用户已存在！"
        }
    } else {
        // 插入到数据库中
        const data = await exec(`insert into user (userName, passWord, userId) values ('${userName}', '${md5(passWord)}', '1')`)
        console.log(data)
        ctx.body = {
            messag: "注册成功！"
        }
    }
})




router.post("/login", async (ctx) => {
    const { userName, passWord } = ctx.request.body
    console.log(ctx.request.headers)
    const data = await exec(`select * from user where userName='${userName}'`)
    // 账号密码匹配
    if (data[0].userName === userName && data[0].passWord === md5(passWord)) {
        // 解析出当前用户的userId
        if (data.length > 0) {
            const { userId } = data[0]
            // 0   1   2
            // 根据用户ID筛选出权限
            const datas = await exec(`select * from user_auth`)
            const filterData = datas.filter(item => {
                return Number(item.auth) >= userId
            })
            const token = jwt.sign({
                userName: data[0].userName,
                userId: data[0].userId
            }, key, {
                // 时效性
                expiresIn: '1h'
            })
            ctx.body = {
                data: filterData,
                message: "登录成功",
                token
            }
        }
    } else {
        ctx.body = {
            message: "账号密码不匹配"
        }
    }
})



// 验证是否登录的中间件
function auth(ctx, next) {
    const token = ctx.request.headers.token
    // 已经登录的状态
    if (token) {
        if (jwt.verify(token, key)) {
            next()
        } else {
            ctx.body = "登录身份过期！"
        }
    } else {
        ctx.body = "请先登录！"
    }

}


// 获取用户钱包余额
router.get('/wallet', auth, async (ctx) => {
    ctx.body = "我已经登录了，准备获取用户钱包的余额"
})


// 获取用户信息
router.get('/getUserInfo', auth, async (ctx) => {
    ctx.body = "我已经登录了，准备获取用户信息"
})


// app.use(auth)

app.use(router.routes())

app.listen(4567)







// router.get('/login', async (ctx, next) => {
//     // ctx  req, res
//     // next   函数  需要调用   执行下一个 async函数
//     ctx.body = "测试接口---1"
//     next()
// }, async (ctx, next) => {
//     ctx.body = "测试接口---2"
//     next()
// }, async (ctx, next) => {
//     ctx.body = "测试接口---3"
// },async (ctx, next) => {
//     ctx.body = "测试接口---4"
// },)


// router.get("/login", async (ctx, next) => {
//     ctx.body = "测试接口---1"
// })


// router.get("/getList", async (ctx, next) => {
//     ctx.body = "测试接口---2"
// })

// 添加中间件
// 访问接口，会先把所有的中间件给执行一遍
// 全局中间件
// app.use(async (ctx, next) => {
//     console.log(1)
//     next()
// })


